package factory.simplefactory;

/**
 * @auther: Steven
 * @created： 2018/2/9 21:22
 * Description：反射实现简单工厂
 */
public class VehicleSimpleFactoryReflection {
    /**
     * 传入class文件来实现交通工具的实例化
     *
     * 缺陷：
     * 1、效率问题，使用反射，那么必然加载额外工作，至少会降低一点效率
     * 2、这种Class.forName实现无参数构造函数生成对象。需要调用带参数的构造函数创建对象时就蒙逼了。
     * 3、不同交通工具需要不同参数进行创建时就更尴尬了。
     *
     * @param cl 交通工具的类
     * @param <T>
     * @return
     */
    public static <T extends IVehicle> T newInstance(Class<T> cl){
        T result=null;
        try {
            result=(T)Class.forName(cl.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return result;
    }
}
